#!/bin/bash

# 颜色定义
GREEN='\033[0;32m'
RED='\033[0;31m'
YELLOW='\033[0;33m'
NC='\033[0m' # 无颜色

# 日志函数
log_info() {
    echo -e "${GREEN}[INFO]${NC} $1"
}

log_warn() {
    echo -e "${YELLOW}[WARN]${NC} $1"
}

log_error() {
    echo -e "${RED}[ERROR]${NC} $1"
}

# 检查是否为root用户
if [ "$(id -u)" != "0" ]; then
   log_error "此脚本必须以root权限运行" 
   exit 1
fi

# 获取脚本所在目录的绝对路径
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
# 获取项目根目录
PROJECT_ROOT="$(dirname "$SCRIPT_DIR")"

log_info "开始部署妙趣拾光锦盒用户系统..."
log_info "项目根目录: $PROJECT_ROOT"

# 安装系统依赖
log_info "正在安装系统依赖..."
yum update -y
yum install -y python3 python3-devel mysql-devel gcc nginx supervisor git

# 创建应用目录
APP_DIR="/var/www/box-user"
log_info "创建应用目录: $APP_DIR"
mkdir -p $APP_DIR
mkdir -p /var/log/box-user

# 复制项目文件到应用目录
log_info "复制项目文件到应用目录..."
cp -r $PROJECT_ROOT/* $APP_DIR/

# 创建并激活虚拟环境
log_info "创建虚拟环境..."
cd $APP_DIR
python3 -m venv venv
source venv/bin/activate

# 安装Python依赖
log_info "安装Python依赖..."
pip install --upgrade pip
pip install -r requirements.txt
pip install gunicorn gevent

# 设置远程数据库连接信息
DB_NAME="csss"
DB_USER="csss"
DB_PASSWORD="12345"
DB_HOST="106.15.51.42"
DB_PORT="3306"

# 创建.env文件
log_info "创建环境变量配置文件..."
cat > $APP_DIR/.env << EOF
SECRET_KEY=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9!@#$%^&*(-_=+)' | head -c 50 || echo "django-insecure-default-key-please-change")
DEBUG=False
ALLOWED_HOSTS=*,localhost,127.0.0.1
DB_NAME=${DB_NAME}
DB_USER=${DB_USER}
DB_PASSWORD=${DB_PASSWORD}
DB_HOST=${DB_HOST}
DB_PORT=${DB_PORT}
DEEPSEEK_API_KEY=sk-34ca6bad403c43529b1f079613c7bb68
EOF

# 创建Gunicorn配置文件
log_info "创建Gunicorn配置文件..."
cat > $APP_DIR/gunicorn_config.py << 'EOF'
# Gunicorn配置文件 - 妙趣拾光锦盒用户系统
import multiprocessing
import os

# 绑定地址和端口 - 绑定到所有接口，允许从任何IP访问
bind = "0.0.0.0:8000"

# 工作进程数量
workers = 4

# 工作线程数量
threads = 2

# 工作模式 - 使用gevent异步处理请求
worker_class = "gevent"

# 请求超时时间(秒)
timeout = 120

# 日志配置
errorlog = os.path.join("/var/log/box-user", "gunicorn-error.log")
accesslog = os.path.join("/var/log/box-user", "gunicorn-access.log")
loglevel = "info"

# 守护进程模式 (在supervisor下不应设置为True)
daemon = False

# 进程名称
proc_name = "box-user"
EOF

# 创建启动脚本
log_info "创建启动脚本..."
cat > $APP_DIR/start.sh << 'EOF'
#!/bin/bash
cd /var/www/box-user
source venv/bin/activate
export DJANGO_SETTINGS_MODULE=boxuser.settings_production
exec gunicorn --config=gunicorn_config.py boxuser.wsgi:application
EOF

chmod +x $APP_DIR/start.sh

# 配置Supervisor
log_info "配置Supervisor..."
cat > /etc/supervisord.d/box-user.ini << 'EOF'
[program:box-user]
command=/var/www/box-user/start.sh
directory=/var/www/box-user
user=root
autostart=true
autorestart=true
startretries=3
stopasgroup=true
killasgroup=true
stderr_logfile=/var/log/box-user/supervisor.err.log
stdout_logfile=/var/log/box-user/supervisor.out.log
environment=LANG=en_US.UTF-8,LC_ALL=en_US.UTF-8
EOF

# 配置Nginx
log_info "配置Nginx..."
cat > /etc/nginx/conf.d/box-user.conf << 'EOF'
server {
    listen 80;
    server_name user.example.com;  # 修改为您的用户端域名

    access_log /var/log/nginx/box-user.access.log;
    error_log /var/log/nginx/box-user.error.log;

    location /static/ {
        alias /var/www/box-user/staticfiles/;
        expires 30d;
    }

    location /media/ {
        alias /var/www/box-user/media/;
        expires 30d;
    }

    location / {
        proxy_pass http://localhost:8000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_connect_timeout 300s;
        proxy_read_timeout 300s;
    }
}
EOF

# 收集静态文件
log_info "收集静态文件..."
cd $APP_DIR
source venv/bin/activate
export DJANGO_SETTINGS_MODULE=boxuser.settings  # 使用标准设置收集静态文件
python manage.py collectstatic --noinput

# 创建日志目录
log_info "创建日志目录..."
mkdir -p $APP_DIR/logs
mkdir -p /var/log/box-user

# 设置文件权限
log_info "设置文件权限..."
chown -R root:root $APP_DIR
chmod -R 755 $APP_DIR
chown -R root:root /var/log/box-user
chmod -R 755 /var/log/box-user

# 启用并启动服务
log_info "启动服务..."
systemctl enable supervisord
systemctl enable nginx
systemctl restart supervisord
systemctl restart nginx

# 检查远程数据库连接
log_info "检查远程数据库连接..."
cd $APP_DIR
source venv/bin/activate
python -c "
import os
import django
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'boxuser.settings')
django.setup()
from django.db import connection
try:
    connection.ensure_connection()
    print('数据库连接成功!')
except Exception as e:
    print(f'数据库连接失败: {e}')
    exit(1)
"

if [ $? -ne 0 ]; then
    log_warn "远程数据库连接失败，请检查连接信息"
    log_info "部署继续进行，但数据库配置可能需要手动修复"
else 
    log_info "远程数据库连接成功!"
fi

# 配置防火墙
log_info "配置防火墙..."
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --reload

log_info "部署完成!"
log_info "您现在可以通过服务器IP或域名访问用户系统。"
log_info "如需自定义域名，请修改 /etc/nginx/conf.d/box-user.conf 文件的server_name字段。"
log_info "远程数据库信息:"
log_info "  数据库主机: ${DB_HOST}:${DB_PORT}"
log_info "  数据库名称: ${DB_NAME}"
log_info "  数据库用户: ${DB_USER}"

# 检查服务状态
log_info "服务状态检查:"
echo "----------------- Supervisor 状态 -----------------"
supervisorctl status box-user
echo "----------------- Nginx 状态 -----------------"
systemctl status nginx | grep "Active:" 